home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 03 - 1987 / 03.11 Nov 87 / C string library / PStrLib Demo / Demo_draw.c next >
Encoding:
C/C++ Source or Header  |  1987-10-20  |  19.0 KB  |  349 lines  |  [TEXT/KAHL]

  1. /*    FILE:  Demo_draw.c
  2. */
  3. #include    "Demo.h"
  4.  
  5. #define        X        20
  6.  
  7. static DrawFN(sp, x, y)    /* Draws sp and returns the pens horz.coord. */
  8. char            *sp;    /* Pascal string (i.e. Function Name) */
  9. register int    x, y;    
  10. {    
  11.     SetFont(monaco, 9, bold);
  12.     MoveTo(x, y);
  13.     DrawString(sp);
  14.     x += StringWidth(sp) + 5;
  15.     TextFace(plain);
  16.     return(x);
  17. }
  18.  
  19. DrawPage()    /* Draws the 'Page' UserItem (dlogItem #5) in dlogW  */
  20. {    /* It gets called by DrawUserItem() when dlogW needs updated */
  21.     auto    Str255            s1_Str255, s2_Str255;
  22.     auto    Rect            tRect;
  23.     
  24.     EraseRect(&uiRect[0]);    /* Erase the userItem's viewRect */
  25.     switch (pageNo) {        /* Draw the current page */
  26.     case 1:
  27.         for (a_int = 0; a_int < 2; ++a_int) {
  28.             tRect.top = 30;
  29.             tRect.left = 220 * a_int + 90;
  30.             tRect.bottom = 62;
  31.             tRect.right = tRect.left + 32;
  32.             PlotIcon(&tRect, GetIcon(512));
  33.         }
  34.         SetFont(newYork, 18, plain);
  35.         PStrDraw(1, "\p<<< MacTutor >>>", CEN, 50);
  36.         SetFont(newYork, 12, bold);
  37.         PStrDraw(1, "\pVol.3 No.11", CEN, NL1);
  38.         SetFont(newYork, 18, plain);
  39.         PStrDraw(1, "\p• Pascal String Library Demo •", CEN, 110);
  40.         SetFont(newYork, 14, bold);
  41.         PStrDraw(1, "\pThe following pages will explain the", CEN, 150);
  42.         PStrDraw(1, "\p'How To's and the 'Results Of' using", CEN, NL1);
  43.         PStrDraw(1, "\peach function in the Pascal String Library.", CEN, NL1);
  44.         break;
  45.     case 2:
  46.         PStrDraw(1, "\p(count, s, h, v, ...)", DrawFN("\pPStrDraw", X, 20), 20);
  47.         PStrDraw(1, "\pcount  -  # of { s, h, v} argument sets to follow.", X, NL1);
  48.         PStrDraw(1, "\ps      -  Pascal string to draw", X, NL1);
  49.         PStrDraw(1, "\ph      -  Horizontal coordinate", X, NL1);
  50.         PStrDraw(1, "\pv      -  Vertical coordinate", X, NL1);
  51.         PStrDraw(1, "\p...    -  2-9 additional sets of { s, h, v}", X, NL1);
  52.         PStrDraw(1, "\pPStrDraw() draws 1 to 10 Pascal strings at specified locations in", X, NL2);
  53.         PStrDraw(1, "\pthe current GrafPort.  It Offers auto-centering and New-Line modes.", X, NL1);
  54.         PStrDraw(1, "\pIf h == 0 then it uses the last (current) h position.", X, NL1);
  55.         PStrDraw(1, "\pIf v == 0 then it uses the last (current) v position.", X, NL1);
  56.         PStrDraw(1, "\pIf x < 0 string is centered inside portRect.  If y < 0", X, NL1);
  57.         PStrDraw(1, "\pstring is offset -y lines from last (current) v position.", X, NL1);
  58.         PStrDraw(1, "\pOtherwise, h and v represent the desired x and y coordinates.", X, NL1);
  59.         PStrDraw(2, "\p<< This was drawn by... >>", CEN, NL1, "\p...Calling:   ", X, NL1);
  60.         PStrDraw(1, "\pPStrDraw(1, \"\\p<< This was drawn by... >>\", CEN, NL1);", CUR, CUR);
  61.         break;
  62.     case 3:
  63.         PStrDraw(1, "\p(font, size, face)", DrawFN("\pSetFont", X, 20), 20);
  64.         PStrDraw(1, "\pfont  -  Font number", X, NL2);
  65.         PStrDraw(1, "\psize  -  Font size", X, NL1);
  66.         PStrDraw(1, "\pface  -  Font style", X, NL1);
  67.         PStrDraw(1, "\pSetFont() sets the txFont, txSize and", X, NL2);
  68.         PStrDraw(1, "\ptxFace fields of the current GrafPort.", X, NL1);
  69.         PStrDraw(2, "\pCalling:", X, NL2, "\pSetFont(monaco, 9, bold);", X+40, NL1);
  70.         PStrDraw(2, "\pProduces Same Result As:", X, NL2, "\pTextFont(monaco);", X+40, NL1);
  71.         PStrDraw(2,"\pTextSize(9);", X+40, NL1, "\pTextFace(bold);", X+40, NL1);
  72.         break; 
  73.     case 4:
  74.         PStrDraw(1, "\p(type, numPtr, s, format, places)", DrawFN("\pNum2PStr", X, 20), 20);
  75.         PStrDraw(1, "\ptype    -  CINT, CLONG, CCOMP, CFLOAT, CSHORTDBL, CDBL", X, NL2);
  76.         PStrDraw(1, "\pnumPtr  -  Address of a given type of number", X, NL1);
  77.         PStrDraw(1, "\ps       -  Pascal string to recieve the string representation", X, NL1);
  78.         PStrDraw(1, "\pformat  -  DEC or SCI (decimal or scientific notation)", X, NL1);
  79.         PStrDraw(1, "\pplaces  -  Number of decimal places desired in representation", X, NL1);
  80.         PStrDraw(1, "\pNum2PStr() creates a pascal string representation of a given", X, NL2);
  81.         PStrDraw(1, "\ptype of number in either decimal or scientific notation.", X, NL1);
  82.         a_double = -987654321.987654321;
  83.         PStrDraw(1, "\pGiven:        a_double == -987654321.987654321", X, NL2);
  84.         PStrDraw(1, "\pCalling:      Num2PStr(CDBL, &a_double, s1_Str255, DEC, 9);", X, NL1);
  85.         Num2PStr(CDBL, &a_double, s1_Str255, DEC, 9);
  86.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  87.         Num2PStr(CDBL, &a_double, s1_Str255, SCI, 17);
  88.         PStrDraw(1, "\pCalling:      Num2PStr(CDBL, &a_double, s1_Str255, SCI, 17);", X, NL1);
  89.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  90.         break;
  91.     case 5:
  92.         PStrDraw(1, "\p(s, type, numPtr)", DrawFN("\pPStr2Num", X, 20), 20);
  93.         PStrDraw(1, "\ps       -  Pascal string representation of a number", X, NL2);
  94.         PStrDraw(1, "\ptype    -  CINT, CLONG, CCOMP, CFLOAT, CSHORTDBL, CDBL", X, NL1);
  95.         PStrDraw(1, "\pnumPtr  -  Address of a given type of number", X, NL1);
  96.         PStrDraw(1, "\pPStr2Num() sets a given type of number equal", X, NL2);
  97.         PStrDraw(1, "\pto the value represented in the pascal string s.", X, NL1);
  98.         PStrCopy("\p-123456789.987654321", 1, ALL, s1_Str255);
  99.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\p-123456789.987654321\"", X, NL2);
  100.         PStrDraw(1, "\pCalling:      PStr2Num(s1_Str255, CDBL, &a_double);", X, NL1);
  101.         PStr2Num(s1_Str255, CDBL, &a_double);
  102.         Num2PStr(CDBL, &a_double, s2_Str255, DEC, 9);
  103.         PStrDraw(2, "\pResults In:   a_double == ", X, NL1, s2_Str255, CUR, CUR);
  104.         break;
  105.     case 6:
  106.         PStrDraw(1, "\p(src, pos, count, dst)", DrawFN("\pPStrCopy", X, 20), 20);
  107.         PStrDraw(1, "\psrc    -  Source pascal string", X, NL2);
  108.         PStrDraw(1, "\ppos    -  Character position in src to start copying", X, NL1);
  109.         PStrDraw(1, "\pcount  -  Number of characters to copy", X, NL1);
  110.         PStrDraw(1, "\pdst    -  Destination pascal string", X, NL1);
  111.         PStrDraw(1, "\pPStrCopy() copies count characters from", X, NL2);
  112.         PStrDraw(1, "\pcharacter position pos of src to dst.", X, NL1);
  113.         PStrCopy("\pThis is a pascal string", 1, ALL, s1_Str255);
  114.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pThis is a pascal string\"", X, NL2);
  115.         PStrDraw(1, "\pCalling:      PStrCopy(s1_Str255, 1, ALL, s2_Str255);", X, NL1);
  116.         PStrCopy(s1_Str255, 1, ALL, s2_Str255);
  117.         PStrDraw(3, "\pResults In:   s2_Str255 == \"\\p", X, NL1, s2_Str255, CUR, CUR, "\p\"", CUR, CUR);
  118.         PStrDraw(1, "\pCalling:      PStrCopy(s2_Str255, 11, 6, s1_Str255);", X, NL1);
  119.         PStrCopy(s2_Str255, 11, 6, s1_Str255);
  120.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  121.         break;
  122.     case 7:
  123.         PStrDraw(1, "\p(count, dst, ...)", DrawFN("\pPStrCat", X, 20), 20);
  124.         PStrDraw(1, "\pcount  -  Number of string arg. present INCLUDING dst", X, NL2);
  125.         PStrDraw(1, "\pdst    -  Destination pascal string", X, NL1);
  126.         PStrDraw(1, "\p...    -  1-29 additional pascal string arguments", X, NL1);
  127.         PStrDraw(1, "\pPStrCat() concatenates 1-29 additional pascal strings onto dst.", X, NL2);
  128.         PStrCopy("\pThanks for", 1, ALL, s1_Str255);
  129.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pThanks for\"", X, NL2);    
  130.         PStrDraw(1, "\pCalling:      PStrCat(3, s1_Str255, \"\\p the hot\", \"\\ptip!\");", X, NL1);
  131.         PStrCat(3, s1_Str255, "\p the hot", "\p tip!");
  132.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  133.         break;
  134.     case 8:
  135.         PStrDraw(1, "\p(src, dst, pos)", DrawFN("\pPStrIns", X, 20), 20);
  136.         PStrDraw(1, "\psrc  -  Pascal string to insert into dst", X, NL2);
  137.         PStrDraw(1, "\pdst  -  Destination pascal string (recieves insertion)", X, NL1);
  138.         PStrDraw(1, "\ppos  -  Character position of insertion in dst", X, NL1);
  139.         PStrDraw(1, "\pPStrIns() inserts src at pos into dst.", X, NL2);
  140.         PStrCopy("\pThat is nice.", 1, ALL, s1_Str255);
  141.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pThat is nice.\"", X, NL2);    
  142.         PStrDraw(1, "\pCalling:      PStrIns(\"\\pvery \", s1_Str255, 9);", X, NL1);
  143.         PStrIns("\pvery ", s1_Str255, 9);
  144.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  145.         break;
  146.     case 9:
  147.         PStrDraw(1, "\p(s, pos, count)", DrawFN("\pPStrDel", X, 20), 20);
  148.         PStrDraw(1, "\ps      -  Pascal string recieving deletion", X, NL2);
  149.         PStrDraw(1, "\ppos    -  Character position to start deleting", X, NL1);
  150.         PStrDraw(1, "\pcount  -  Number of characters to be deleted", X, NL1);
  151.         PStrDraw(1, "\pPStrDel() deletes count characters starting at pos from s.", X, NL2);
  152.         PStrCopy("\pHe has not finished.", 1, ALL, s1_Str255);
  153.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pHe has not finished.\"", X, NL2);    
  154.         PStrDraw(1, "\pCalling:      PStrDel(s1_Str255, 8, 4);", X, NL1);
  155.         PStrDel(s1_Str255, 8, 4);;
  156.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  157.         break;
  158.     case 10:
  159.         PStrDraw(1, "\p(src, pos, count, dst)", DrawFN("\pPStrRep", X, 20), 20);
  160.         PStrDraw(1, "\pdst    -  Pascal string recieving replacement", X, NL2);
  161.         PStrDraw(1, "\ppos    -  Character position to start replacing", X, NL1);
  162.         PStrDraw(1, "\pcount  -  Number of characters to replace", X, NL1);
  163.         PStrDraw(1, "\psrc    -  Pascal string replacement", X, NL1);
  164.         PStrDraw(1, "\pPStrRep() replaces count characters", X, NL2);
  165.         PStrDraw(1, "\pstarting at pos in dst with src.", X, NL1);
  166.         PStrCopy("\pJane ran home.", 1, ALL, s1_Str255);
  167.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pJane ran home.\"", X, NL2);    
  168.         PStrDraw(1, "\pCalling:      PStrRep(s1_Str255, 6, 3, \"\\pwalked\");", X, NL1);
  169.         PStrRep(s1_Str255, 6, 3, "\pwalked");
  170.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  171.         break;
  172.     case 11:
  173.         PStrDraw(1, "\p(s, len, c)", DrawFN("\pPStrFixLen", X, 20), 20);
  174.         PStrDraw(1, "\ps    -  Pascal string", X, NL2);
  175.         PStrDraw(1, "\plen  -  Desired length", X, NL1);
  176.         PStrDraw(1, "\pc    -  Character used to pad to greater length", X, NL1);
  177.         PStrDraw(1, "\pPStrFixLen() gaurantees that the length of s to", X, NL2);
  178.         PStrDraw(1, "\pbe equal to len by chopping extra characters off", X, NL1);
  179.         PStrDraw(1, "\por by padding-out with as many c's as neccessary.", X, NL1);
  180.         PStrCopy("\pJohn Doe", 1, ALL, s1_Str255);
  181.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pJohn Doe\"", X, NL2);    
  182.         PStrDraw(1, "\pCalling:      PStrFixLen(s1_Str255, 10, ' ');", X, NL1);
  183.         PStrFixLen(s1_Str255, 10, ' ');
  184.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  185.         PStrDraw(1, "\pCalling:      PStrFixLen(s1_Str255, 4, ' ');", X, NL1);
  186.         PStrFixLen(s1_Str255, 4, ' ');
  187.         PStrDraw(3, "\pResults In:   s1_Str255 == \"\\p", X, NL1, s1_Str255, CUR, CUR, "\p\"", CUR, CUR);
  188.         break;
  189.     case 12:
  190.         PStrDraw(1, "\p(p, t, pos)", DrawFN("\pPStrFind", X, 20), 20);
  191.         PStrDraw(1, "\pp    -  Pascal string containing pattern to find.", X, NL2);
  192.         PStrDraw(1, "\pt    -  Pascal string of text to search.", X, NL1);
  193.         PStrDraw(1, "\ppos  -  Character position in t to start searching.", X, NL1);
  194.         PStrDraw(1, "\pPStrFind() finds the first occurance of p in t.", X, NL2);
  195.         PStrDraw(1, "\pIt returns the char.position found else zero.", X, NL1);
  196.         PStrCopy("\pI am that I am.", 1, ALL, s1_Str255);
  197.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pI am that I am.\"", X, NL2);    
  198.         PStrDraw(1, "\pCalling:      a_int = PStrFind(\"\\pam\", s1_Str255, 1);", X, NL1);
  199.         a_int = PStrFind("\pam", s1_Str255, 1);
  200.         Num2PStr(CINT, &a_int, s2_Str255, DEC, 0);
  201.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s2_Str255, CUR, CUR);
  202.         PStrDraw(1, "\pCalling:      a_int = PStrFind(\"\\pam\", s1_Str255, 5);", X, NL1);
  203.         a_int = PStrFind("\pam", s1_Str255, 5);
  204.         Num2PStr(CINT, &a_int, s2_Str255, DEC, 0);
  205.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s2_Str255, CUR, CUR);
  206.         break;
  207.     case 13:
  208.         PStrDraw(1, "\p(s, c)", DrawFN("\pPStrFindFC", X, 20), 20);
  209.         PStrDraw(1, "\ps  -  Pascal string to search", X, NL2);
  210.         PStrDraw(1, "\pc  -  Character to find", X, NL1);
  211.         PStrDraw(1, "\pPStrFindFC() finds the first occurance of c in s.", X, NL2);
  212.         PStrDraw(1, "\pIt returns the char.position found else zero.", X, NL1);
  213.         PStrCopy("\pabcdefg", 1, ALL, s1_Str255);
  214.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pabcdefg\"", X, NL2);    
  215.         PStrDraw(1, "\pCalling:      a_int = PStrFindFC(s1_Str255, 'e');", X, NL1);
  216.         a_int = PStrFindFC(s1_Str255, 'e');
  217.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  218.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  219.         break;
  220.     case 14:
  221.         PStrDraw(1, "\p(s, c)", DrawFN("\pPStrFindLC", X, 20), 20);
  222.         PStrDraw(1, "\ps  -  Pascal string to search", X, NL2);
  223.         PStrDraw(1, "\pc  -  Character to find", X, NL1);
  224.         PStrDraw(1, "\pPStrFindFC() finds the last occurance of c in s.", X, NL2);
  225.         PStrDraw(1, "\pIt returns the char.position found else zero.", X, NL1);
  226.         PStrCopy("\pabcde abcde", 1, ALL, s1_Str255);
  227.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pabcde abcde\"", X, NL2);    
  228.         PStrDraw(1, "\pCalling:      a_int = PStrFindLC(s1_Str255, 'b');", X, NL1);
  229.         a_int = PStrFindLC(s1_Str255, 'b');
  230.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  231.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  232.         break;
  233.     case 15:
  234.         PStrDraw(1, "\p(s, set)", DrawFN("\pPStrFindFS", X, 20), 20);
  235.         PStrDraw(1, "\ps    -  Pascal string to search", X, NL2);
  236.         PStrDraw(1, "\pset  -  Pascal string considered as a set of characters", X, NL1);
  237.         PStrDraw(1, "\pPStrFindFS() finds the first occurance in both s and set.", X, NL2);
  238.         PStrDraw(1, "\pIt returns the char.position found else zero.", X, NL1);
  239.         PStrCopy("\pThis works great!", 1, ALL, s1_Str255);
  240.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pThis works great!\"", X, NL2);    
  241.         PStrDraw(1, "\pCalling:      a_int = PStrFindFS(s1_Str255, \"\\pabc\");", X, NL1);
  242.         a_int = PStrFindFS(s1_Str255, "\pabc");
  243.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  244.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  245.         break;
  246.     case 16:
  247.         PStrDraw(1, "\p(s, set)", DrawFN("\pPStrFindLS", X, 20), 20);
  248.         PStrDraw(1, "\ps    -  Pascal string to search", X, NL2);
  249.         PStrDraw(1, "\pset  -  Pascal string considered as a set of characters", X, NL1);
  250.         PStrDraw(1, "\pPStrFindLS() finds the last occurance in both s and set.", X, NL2);
  251.         PStrDraw(1, "\pIt returns the char.position found else zero.", X, NL1);
  252.         PStrCopy("\pPeace, Peace!", 1, ALL, s1_Str255);
  253.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pPeace, Peace!\"", X, NL2);    
  254.         PStrDraw(1, "\pCalling:      a_int = PStrFindLS(s1_Str255, \"\\pabc\");", X, NL1);
  255.         a_int = PStrFindLS(s1_Str255, "\pabc");
  256.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  257.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  258.         break;
  259.     case 17:
  260.         PStrDraw(1, "\p(s, set)", DrawFN("\pPStrFindFNS", X, 20), 20);
  261.         PStrDraw(1, "\ps    -  Pascal string to search", X, NL2);
  262.         PStrDraw(1, "\pset  -  Pascal string considered as a set of characters", X, NL1);
  263.         PStrDraw(1, "\pPStrFindFNS() finds the first occurance NOT in both s and set.", X, NL2);
  264.         PStrDraw(1, "\pIt returns the char.position found else zero.", X, NL1);
  265.         PStrCopy("\pS.O.S., S.O.S", 1, ALL, s1_Str255);
  266.         PStrDraw(1, "\pGiven:        s1_Str255 == \"\\pS.O.S., S.O.S\"", X, NL2);    
  267.         PStrDraw(1, "\pCalling:      a_int = PStrFindFNS(s1_Str255, \"\\pS.O\");", X, NL1);
  268.         a_int = PStrFindFNS(s1_Str255, "\pS.O");
  269.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  270.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  271.         break;
  272.     case 18:
  273.         PStrDraw(1, "\p(s1, s2)", DrawFN("\pPStrCmp", X, 20), 20);
  274.         PStrDraw(1, "\ps1  -  Pascal string", X, NL2);
  275.         PStrDraw(1, "\ps2  -  Pascal string", X, NL1);
  276.         PStrDraw(1, "\pPStrCmp() compares s1 to s2.", X, NL2);
  277.         PStrDraw(1, "\pResult: <0 less than;  ==0 equal;  >0 greater than", X, NL1);
  278.         PStrDraw(1, "\pCalling:      a_int = PStrCmp(\"\\pABCD\", \"\\pABCE\");", X, NL2);
  279.         a_int = PStrCmp("\pABCD", "\pABCE");
  280.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  281.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  282.         PStrDraw(1, "\pCalling:      a_int = PStrCmp(\"\\pABCD\", \"\\pABCD\");", X, NL1);
  283.         a_int = PStrCmp("\pABCD", "\pABCD");
  284.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  285.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  286.         PStrDraw(1, "\pCalling:      a_int = PStrCmp(\"\\pABCDF\", \"\\pABCDE\");", X, NL1);
  287.         a_int = PStrCmp("\pABCDF", "\pABCDE");
  288.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  289.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  290.         PStrDraw(1, "\pCalling:      a_int = PStrCmp(\"\\pABC\", \"\\pABCD\");", X, NL1);
  291.         a_int = PStrCmp("\pPStr 1", "\pPStr 12");
  292.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  293.         PStrDraw(2, "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  294.         break;
  295.     case 19:
  296.         PStrDraw(1, "\p(count, varLabel, varType, varPtr, ...)", DrawFN("\pShowVars", 8, 15), 15);
  297.         PStrDraw(1, "\pcount     -  # of { varLabel, varType, varPtr } arg. sets to follow", 8, NL1);
  298.         PStrDraw(1, "\pvarLabel  -  Pascal string used as variable's label", 8, NL1);
  299.         PStrDraw(1, "\pvarType   -  Type of variable", 8, NL1);
  300.         PStrDraw(1, "\pvarPtr    -  Variable's address", 8, NL1);
  301.         PStrDraw(1, "\p...       -  1-9 additional sets of { varLabel, varType, varPtr }", 8, NL1);
  302.         PStrDraw(1, "\pShowVars() displays the label & value of 1-10 variables.  It's a", 8, NL1);
  303.         PStrDraw(1, "\pgreat run-time debugging tool!  Here's an example calling sequence:", 8, NL1);
  304.         TextFace(bold);
  305.         PStrDraw(1, "\p<<< Click ShowVars Button To See Result >>>", CEN, NL1);
  306.         TextFace(plain);
  307.         PStrDraw(1, "\pShowVars(7, \"\\pa_Boolean\", BOOL, &a_Boolean,", 8, NL1);
  308.         PStrDraw(1, "\p            \"\\pa_int\", CINT, &a_int,", 8, NL1);
  309.         PStrDraw(1, "\p            \"\\pa_long\", CLONG, &a_long,", 8, NL1);
  310.         PStrDraw(1, "\p            \"\\pa_float\", CFLOAT, &a_float,", 8, NL1);
  311.         PStrDraw(1, "\p            \"\\pa_shortDbl\", CSHORTDBL, &a_shortDbl,", 8, NL1);
  312.         PStrDraw(1, "\p            \"\\pa_double\", CDBL, &a_double,", 8, NL1);
  313.         PStrDraw(1, "\p            \"\\pa_Str255\", PSTR, s1_Str255);", 8, NL1);
  314.         break;
  315.     case 20:
  316.         SetFont(monaco, 9, plain);
  317.         PStrDraw(1, "\pThe Following macros are defined in PStrLib.h:  IsAlphaNum(c),", X, 20);
  318.         PStrDraw(1, "\pIsAlpha(c), IsAscii(c), IsCntrl(c), IsCSym(c), IsCSymF(c),", X, NL1);
  319.         PStrDraw(1, "\pIsDigit(c), IsGraph(c), IsOctDigit(c), IsPrint(c), IsPunct(c),", X, NL1);
  320.         PStrDraw(1, "\pIsSpace(c)  IsHexDigit(c).  They all test character c for their", X, NL1);
  321.         PStrDraw(1, "\prespective conditions returning 0 if FALSE else >0 TRUE.  WARNING:", X, NL1);
  322.         PStrDraw(1, "\pDon't use c's delcared as type char (see PStrLib.h for explanation)!", X, NL1);
  323.         a_int = IsAlpha('a');
  324.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  325.         PStrDraw(3, "\pExecuting:    a_int = IsAlpha('a');    ", X, NL2,
  326.                     "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  327.         a_int = IsAlpha('1');
  328.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  329.         PStrDraw(3, "\pExecuting:    a_int = IsAlpha('1');", X, NL1,
  330.                     "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  331.         a_int = IsDigit('a');
  332.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  333.         PStrDraw(3, "\pExecuting:    a_int = IsDigit('a');", X, NL1,
  334.                     "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  335.         a_int = IsDigit('1');
  336.         Num2PStr(CINT, &a_int, s1_Str255, DEC, 0);
  337.         PStrDraw(3, "\pExecuting:    a_int = IsDigit('1');", X, NL1,
  338.                     "\pResults In:   a_int == ", X, NL1, s1_Str255, CUR, CUR);
  339.         break;
  340.     }
  341.     /* Draw the pageNo page in the userItem's display rect */
  342.     Num2PStr(CINT, &pageNo, s2_Str255, DEC, 0);
  343.     s1_Str255[0] = 0;
  344.     PStrCat(3, s1_Str255, "\pPage ", s2_Str255);
  345.     TextFont(newYork);
  346.     TextSize(10);
  347.     TextFace(bold);
  348.     PStrDraw(1, s1_Str255, CEN, 230);
  349. }